// Proxy
// 1. proxy 可以拦截目标对象的操作，比如读取属性，写属性，删除属性，函数调用等
// 2. 代理的是整个对象，而不是对象的某个属性
// 3. 自定义行为： 在拦截操作时，可以自定义行为逻辑，例如验证，日志记录，数据转换等
// 4. 语法 new Proxy(target, handler) 
//    target: 要拦截的目标对象 handler: 一个对象，其属性是当执行一个操作时定义代理的行为的函数
//    例子：
const target = {
  name: 'target',
  value: 42
}
const handler = {
  set: function (target, property, value, receiver) {
    console.log(`setting ${property}: ${target[property]} to ${value}`)
    target[property] = value
  }, get: function (target, property, receiver) {
    console.log(`getting ${property}`)
    return target[property]
  }
}
const proxy = new Proxy(target, handler)
console.log(proxy.name)
proxy.name = 'proxy'

